import os
import os.path
import subprocess

# 文件转换的映射表
convertType = {
    '.html':'.md',  # 把 .html 转为 .md 文件
}

inputDirOrFile = "C:\\Users\\Administrator\\Downloads\\python-3.9.2-docs-html"   # 指定的目录或者文件
outputDir = "F:\\b" # 输出的目录，如果 inputDirOrFile 为目录，则输出的目录会按照输入的目录进行放置

pandocPath = "C:\\Program Files\\Pandoc\\pandoc.exe"  # pandoc.exe 如果配置到环境变量中的话，可以直接使用 pandoc.exe 而不需要额外配置对应的路径

convertAmount = 0  # 用于统计转换文件的数量

def log(sContent):
    print(sContent)

# 生成不存在的目录
def GenerateNotExistDir(sDirOrFile):
    sAbsDirOrFile = WashDirOrFile(sDirOrFile)
    tSplitext = os.path.splitext(sAbsDirOrFile)
    if(tSplitext[1] == ""):
        # 按照目录处理
        if(not os.path.isdir(tSplitext[0])):
            os.makedirs(tSplitext[0])
    else:
        # 按照 文件处理
        tSplit = os.path.split(sAbsDirOrFile)
        if(not os.path.isdir(tSplit[0])):
            os.makedirs(tSplit[0])

# 把目录或者路径转换为标准的全局路径
def WashDirOrFile(sDirOrFile):
    if (not os.path.isabs(sDirOrFile)):
        sDirOrFile = os.path.abspath(sDirOrFile)
    # log(sDirOrFile)
    return sDirOrFile

def ConvertFile(oldFilePath, newFilePath):
    if(os.path.isfile(oldFilePath)):
        GenerateNotExistDir(newFilePath)
        sCommand = "\"{}\" \"{}\" -o \"{}\"".format(pandocPath, oldFilePath, newFilePath)
        # log(sCommand)
        subprocess.run(sCommand)
        global convertAmount
        convertAmount = convertAmount + 1

# 把指定的目录或者文件，转换到指定的目录下
def Convert(inputDirOrFile, outputDir="./"):
    inputDirOrFile = WashDirOrFile(inputDirOrFile)
    outputDir = WashDirOrFile(outputDir)
    if(os.path.exists(inputDirOrFile)):
        if(os.path.isdir(inputDirOrFile)):
            for parent,dirnames,filenames in os.walk(inputDirOrFile):
                for filename in filenames:
                    inputFilePath = os.path.join(parent, filename)
                    tInputFilePathSplit = os.path.split(inputFilePath)
                    sPrePath = tInputFilePathSplit[0].replace(inputDirOrFile, "")
                    sPrePath = sPrePath.replace(os.path.sep, "")
                    newOutDir = os.path.join(outputDir, sPrePath)
                    # log(outputDir + "+" + sPrePath + "=" +newOutDir)
                    Convert(inputFilePath, newOutDir)
        else:
            # 输入对象是一个文件
            tInputSplit = os.path.split(inputDirOrFile)
            tInputSplitExt = os.path.splitext(tInputSplit[1])
            newExt = convertType.get(tInputSplitExt[1])
            if newExt:
                outputFileName = tInputSplitExt[0] + newExt
                outputFile = os.path.join(outputDir, outputFileName)
                ConvertFile(inputDirOrFile, outputFile)
    else:
        log(inputDirOrFile + "：不存在")
    log("总共转化的文件数量：" + str(convertAmount))

def Main():
    global inputDirOrFile
    global outputDir
    Convert(inputDirOrFile, outputDir)
    
if __name__ == "__main__":
    Main()